# !pip3 install --upgrade tensorflow
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
# import seaborn as sns
from tensorflow.keras.layers import Conv2D, MaxPool2D, Dropout, Input, Flatten, Dense
from tensorflow.keras.initializers import HeUniform, HeNormal
from tensorflow.keras.optimizers import Adam
from tensorflow.keras import losses
from tensorflow import keras
from tensorflow.keras.utils import to_categorical
%matplotlib inline
# %tensorflow_version 2.x
tf.__version__
'2.6.1'
# data = unpickle('drive/MyDrive/b533_hw3/cifar-10-python.tar')
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()
assert x_train.shape == (50000, 32, 32, 3)
assert x_test.shape == (10000, 32, 32, 3)
assert y_train.shape == (50000, 1)
assert y_test.shape == (10000, 1)
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
# x_train_og = x_train.copy()
# x_train = (x_train-127.5)/127.5
# x_test = x_test/255
x_test_5k = x_train[45000:]
y_test_5k = y_train[45000:]
print("Test Data:")
print(x_test_5k.shape, y_test_5k.shape)
x_train_45k = x_train[:45000]
y_train_45k = y_train[:45000]
print("Train Data:")
print(x_train_45k.shape, y_train_45k.shape)
Test Data: (5000, 32, 32, 3) (5000, 10) Train Data: (45000, 32, 32, 3) (45000, 10)
# %ls drive/MyDrive/b533_HW3/Part1/
from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = make_subplots(rows=1, cols=2, subplot_titles=("Loss", "Accuracy"))
fig.add_trace(go.Scatter(y=model1_fit.history['loss'], line_color='red',name='Training Loss' ),row=1, col=1)
fig.add_trace(go.Scatter(y=model1_fit.history['val_loss'],line_color='orange',name='Testing Loss'),row=1, col=1)
fig.add_trace(go.Scatter(y=model1_fit.history['Accuracy'],line_color='blue',name='Training Accuracy'),row=1, col=2)
fig.add_trace(go.Scatter(y=model1_fit.history['val_Accuracy'],line_color='green',name='Testing Accuracy'),row=1, col=2)
fig.update_yaxes(title_text="loss", row=1, col=1)
fig.update_yaxes(title_text="accuracy", row=1, col=2)
fig.update_layout(height=600, width=800, title_text="HW3:P1 CNN model metrics")
fig.show()
# Augment 1:
x_train_norm = x_train_45k/255
# y_train_norm = y_train_45k/255
x_train_aug1 = x_train_norm
def brighten(x):
return np.minimum(1.1*x, 1)
x_train_aug1 = np.array([brighten(x) for x in x_train_aug1])
x_train_aug1.shape
(45000, 32, 32, 3)
x_train_aug2 = x_train_norm
def darken(x):
return x*0.9
x_train_aug2 = np.array([darken(x) for x in x_train_aug2])
x_train_aug2.shape
(45000, 32, 32, 3)
x_train_aug3 =x_train_norm
x_train_aug3 = np.array([np.fliplr(x) for x in x_train_aug3])
x_train_aug3.shape
(45000, 32, 32, 3)
# Concat all arrays
x_train_aug_all = np.concatenate((x_train_aug1, x_train_aug2), axis=0)
del x_train_aug1
del x_train_aug2
x_train_aug_all = np.concatenate((x_train_aug_all, x_train_aug3), axis=0)
x_train_aug3=None
x_train_aug_all = np.concatenate((x_train_aug_all, x_train_norm), axis=0)
x_train_aug_all.shape
(180000, 32, 32, 3)
# scaline to [-1, +1] index
x_train_aug_all = (x_train_aug_all-0.5)/0.5
y_train_aug_all = np.concatenate((y_train_45k, y_train_45k), axis=0)
y_train_aug_all = np.concatenate((y_train_aug_all, y_train_45k), axis=0)
y_train_aug_all = np.concatenate((y_train_aug_all, y_train_45k), axis=0)
y_train_aug_all.shape
(180000, 10)
del y_train_45k
del x_train_norm
del x_train_45k
x_test_5k = (x_test_5k-127.5)/127.5
# Part1 model 2
model2 = keras.Sequential([
Conv2D(10, kernel_size=(5,5), kernel_initializer=HeNormal(), activation='relu', strides=1, name='layer1_conv2d', input_shape=(32,32,3)),
MaxPool2D(pool_size=(2,2), strides=2, name='layer1_maxpool2d'),
Conv2D(10, kernel_size=(5,5), kernel_initializer=HeNormal(), activation='relu', strides=1, name='layer2_conv2d'),
MaxPool2D(pool_size=(2,2), strides=2, name='layer2_maxpool2d'),
Flatten(name='flatten'),
Dense(20, activation='relu', kernel_initializer=HeNormal(), name='layer3_dense'),
Dense(10, activation='softmax', kernel_initializer=HeNormal(), name='output')
])
model2.compile(
optimizer=Adam(learning_rate=0.001),
loss = losses.CategoricalCrossentropy(),
metrics=['Accuracy']
)
model2.summary()
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= layer1_conv2d (Conv2D) (None, 28, 28, 10) 760 _________________________________________________________________ layer1_maxpool2d (MaxPooling (None, 14, 14, 10) 0 _________________________________________________________________ layer2_conv2d (Conv2D) (None, 10, 10, 10) 2510 _________________________________________________________________ layer2_maxpool2d (MaxPooling (None, 5, 5, 10) 0 _________________________________________________________________ flatten (Flatten) (None, 250) 0 _________________________________________________________________ layer3_dense (Dense) (None, 20) 5020 _________________________________________________________________ output (Dense) (None, 10) 210 ================================================================= Total params: 8,500 Trainable params: 8,500 Non-trainable params: 0 _________________________________________________________________
model2_fit = model2.fit(
x=x_train_aug_all,
y=y_train_aug_all,
validation_data = (x_test_5k, y_test_5k),
epochs=200,
batch_size=512,
verbose=2
)
Epoch 1/200 352/352 - 9s - loss: 1.7390 - Accuracy: 0.3683 - val_loss: 1.4755 - val_Accuracy: 0.4592 Epoch 2/200 352/352 - 8s - loss: 1.3887 - Accuracy: 0.5009 - val_loss: 1.3309 - val_Accuracy: 0.5258 Epoch 3/200 352/352 - 8s - loss: 1.2801 - Accuracy: 0.5449 - val_loss: 1.2546 - val_Accuracy: 0.5596 Epoch 4/200 352/352 - 8s - loss: 1.2135 - Accuracy: 0.5694 - val_loss: 1.1895 - val_Accuracy: 0.5804 Epoch 5/200 352/352 - 8s - loss: 1.1687 - Accuracy: 0.5879 - val_loss: 1.1619 - val_Accuracy: 0.5850 Epoch 6/200 352/352 - 8s - loss: 1.1349 - Accuracy: 0.5998 - val_loss: 1.1364 - val_Accuracy: 0.6006 Epoch 7/200 352/352 - 8s - loss: 1.1075 - Accuracy: 0.6093 - val_loss: 1.1098 - val_Accuracy: 0.6040 Epoch 8/200 352/352 - 8s - loss: 1.0835 - Accuracy: 0.6180 - val_loss: 1.0915 - val_Accuracy: 0.6148 Epoch 9/200 352/352 - 8s - loss: 1.0640 - Accuracy: 0.6259 - val_loss: 1.0759 - val_Accuracy: 0.6256 Epoch 10/200 352/352 - 8s - loss: 1.0481 - Accuracy: 0.6310 - val_loss: 1.0598 - val_Accuracy: 0.6310 Epoch 11/200 352/352 - 8s - loss: 1.0342 - Accuracy: 0.6372 - val_loss: 1.0464 - val_Accuracy: 0.6372 Epoch 12/200 352/352 - 8s - loss: 1.0237 - Accuracy: 0.6406 - val_loss: 1.0424 - val_Accuracy: 0.6360 Epoch 13/200 352/352 - 8s - loss: 1.0112 - Accuracy: 0.6449 - val_loss: 1.0517 - val_Accuracy: 0.6386 Epoch 14/200 352/352 - 8s - loss: 1.0022 - Accuracy: 0.6484 - val_loss: 1.0350 - val_Accuracy: 0.6434 Epoch 15/200 352/352 - 8s - loss: 0.9942 - Accuracy: 0.6511 - val_loss: 1.0251 - val_Accuracy: 0.6502 Epoch 16/200 352/352 - 8s - loss: 0.9870 - Accuracy: 0.6539 - val_loss: 1.0162 - val_Accuracy: 0.6534 Epoch 17/200 352/352 - 8s - loss: 0.9812 - Accuracy: 0.6561 - val_loss: 1.0041 - val_Accuracy: 0.6554 Epoch 18/200 352/352 - 8s - loss: 0.9729 - Accuracy: 0.6595 - val_loss: 1.0149 - val_Accuracy: 0.6542 Epoch 19/200 352/352 - 8s - loss: 0.9665 - Accuracy: 0.6617 - val_loss: 0.9988 - val_Accuracy: 0.6570 Epoch 20/200 352/352 - 9s - loss: 0.9621 - Accuracy: 0.6633 - val_loss: 1.0062 - val_Accuracy: 0.6562 Epoch 21/200 352/352 - 8s - loss: 0.9590 - Accuracy: 0.6641 - val_loss: 1.0021 - val_Accuracy: 0.6574 Epoch 22/200 352/352 - 8s - loss: 0.9524 - Accuracy: 0.6677 - val_loss: 1.0141 - val_Accuracy: 0.6554 Epoch 23/200 352/352 - 9s - loss: 0.9489 - Accuracy: 0.6686 - val_loss: 0.9940 - val_Accuracy: 0.6576 Epoch 24/200 352/352 - 8s - loss: 0.9434 - Accuracy: 0.6705 - val_loss: 0.9789 - val_Accuracy: 0.6632 Epoch 25/200 352/352 - 9s - loss: 0.9377 - Accuracy: 0.6736 - val_loss: 1.0062 - val_Accuracy: 0.6536 Epoch 26/200 352/352 - 8s - loss: 0.9350 - Accuracy: 0.6744 - val_loss: 0.9855 - val_Accuracy: 0.6608 Epoch 27/200 352/352 - 8s - loss: 0.9308 - Accuracy: 0.6753 - val_loss: 0.9774 - val_Accuracy: 0.6654 Epoch 28/200 352/352 - 8s - loss: 0.9274 - Accuracy: 0.6773 - val_loss: 0.9766 - val_Accuracy: 0.6618 Epoch 29/200 352/352 - 8s - loss: 0.9244 - Accuracy: 0.6775 - val_loss: 0.9866 - val_Accuracy: 0.6604 Epoch 30/200 352/352 - 8s - loss: 0.9222 - Accuracy: 0.6793 - val_loss: 0.9685 - val_Accuracy: 0.6646 Epoch 31/200 352/352 - 8s - loss: 0.9200 - Accuracy: 0.6788 - val_loss: 0.9802 - val_Accuracy: 0.6594 Epoch 32/200 352/352 - 8s - loss: 0.9173 - Accuracy: 0.6809 - val_loss: 0.9663 - val_Accuracy: 0.6698 Epoch 33/200 352/352 - 8s - loss: 0.9145 - Accuracy: 0.6817 - val_loss: 0.9918 - val_Accuracy: 0.6570 Epoch 34/200 352/352 - 8s - loss: 0.9117 - Accuracy: 0.6822 - val_loss: 0.9817 - val_Accuracy: 0.6660 Epoch 35/200 352/352 - 8s - loss: 0.9080 - Accuracy: 0.6826 - val_loss: 0.9704 - val_Accuracy: 0.6652 Epoch 36/200 352/352 - 8s - loss: 0.9074 - Accuracy: 0.6846 - val_loss: 0.9758 - val_Accuracy: 0.6584 Epoch 37/200 352/352 - 9s - loss: 0.9024 - Accuracy: 0.6862 - val_loss: 0.9627 - val_Accuracy: 0.6694 Epoch 38/200 352/352 - 8s - loss: 0.9005 - Accuracy: 0.6852 - val_loss: 0.9791 - val_Accuracy: 0.6606 Epoch 39/200 352/352 - 8s - loss: 0.8988 - Accuracy: 0.6859 - val_loss: 0.9710 - val_Accuracy: 0.6688 Epoch 40/200 352/352 - 8s - loss: 0.8983 - Accuracy: 0.6869 - val_loss: 0.9585 - val_Accuracy: 0.6720 Epoch 41/200 352/352 - 8s - loss: 0.8943 - Accuracy: 0.6886 - val_loss: 0.9564 - val_Accuracy: 0.6722 Epoch 42/200 352/352 - 8s - loss: 0.8951 - Accuracy: 0.6885 - val_loss: 0.9610 - val_Accuracy: 0.6676 Epoch 43/200 352/352 - 8s - loss: 0.8924 - Accuracy: 0.6892 - val_loss: 0.9702 - val_Accuracy: 0.6672 Epoch 44/200 352/352 - 8s - loss: 0.8910 - Accuracy: 0.6898 - val_loss: 0.9724 - val_Accuracy: 0.6598 Epoch 45/200 352/352 - 8s - loss: 0.8893 - Accuracy: 0.6896 - val_loss: 0.9566 - val_Accuracy: 0.6714 Epoch 46/200 352/352 - 8s - loss: 0.8862 - Accuracy: 0.6904 - val_loss: 0.9591 - val_Accuracy: 0.6710 Epoch 47/200 352/352 - 8s - loss: 0.8842 - Accuracy: 0.6918 - val_loss: 0.9542 - val_Accuracy: 0.6666 Epoch 48/200 352/352 - 8s - loss: 0.8847 - Accuracy: 0.6914 - val_loss: 0.9534 - val_Accuracy: 0.6724 Epoch 49/200 352/352 - 8s - loss: 0.8817 - Accuracy: 0.6925 - val_loss: 0.9549 - val_Accuracy: 0.6748 Epoch 50/200 352/352 - 8s - loss: 0.8812 - Accuracy: 0.6927 - val_loss: 0.9678 - val_Accuracy: 0.6612 Epoch 51/200 352/352 - 8s - loss: 0.8801 - Accuracy: 0.6921 - val_loss: 0.9507 - val_Accuracy: 0.6718 Epoch 52/200 352/352 - 8s - loss: 0.8771 - Accuracy: 0.6954 - val_loss: 0.9481 - val_Accuracy: 0.6710 Epoch 53/200 352/352 - 8s - loss: 0.8763 - Accuracy: 0.6943 - val_loss: 0.9867 - val_Accuracy: 0.6650 Epoch 54/200 352/352 - 8s - loss: 0.8747 - Accuracy: 0.6955 - val_loss: 0.9560 - val_Accuracy: 0.6664 Epoch 55/200 352/352 - 8s - loss: 0.8739 - Accuracy: 0.6955 - val_loss: 0.9473 - val_Accuracy: 0.6724 Epoch 56/200 352/352 - 9s - loss: 0.8720 - Accuracy: 0.6954 - val_loss: 0.9505 - val_Accuracy: 0.6688 Epoch 57/200 352/352 - 8s - loss: 0.8712 - Accuracy: 0.6970 - val_loss: 0.9491 - val_Accuracy: 0.6720 Epoch 58/200 352/352 - 8s - loss: 0.8724 - Accuracy: 0.6956 - val_loss: 0.9828 - val_Accuracy: 0.6596 Epoch 59/200 352/352 - 8s - loss: 0.8700 - Accuracy: 0.6962 - val_loss: 0.9454 - val_Accuracy: 0.6746 Epoch 60/200 352/352 - 8s - loss: 0.8693 - Accuracy: 0.6969 - val_loss: 0.9686 - val_Accuracy: 0.6702 Epoch 61/200 352/352 - 8s - loss: 0.8671 - Accuracy: 0.6976 - val_loss: 0.9554 - val_Accuracy: 0.6726 Epoch 62/200 352/352 - 8s - loss: 0.8668 - Accuracy: 0.6987 - val_loss: 0.9448 - val_Accuracy: 0.6722 Epoch 63/200 352/352 - 8s - loss: 0.8654 - Accuracy: 0.6990 - val_loss: 0.9506 - val_Accuracy: 0.6734 Epoch 64/200 352/352 - 8s - loss: 0.8618 - Accuracy: 0.6996 - val_loss: 0.9425 - val_Accuracy: 0.6734 Epoch 65/200 352/352 - 8s - loss: 0.8628 - Accuracy: 0.6986 - val_loss: 0.9432 - val_Accuracy: 0.6704 Epoch 66/200 352/352 - 8s - loss: 0.8631 - Accuracy: 0.6982 - val_loss: 0.9399 - val_Accuracy: 0.6750 Epoch 67/200 352/352 - 8s - loss: 0.8607 - Accuracy: 0.6999 - val_loss: 0.9515 - val_Accuracy: 0.6724 Epoch 68/200 352/352 - 8s - loss: 0.8607 - Accuracy: 0.6990 - val_loss: 0.9437 - val_Accuracy: 0.6754 Epoch 69/200 352/352 - 8s - loss: 0.8595 - Accuracy: 0.7006 - val_loss: 0.9690 - val_Accuracy: 0.6634 Epoch 70/200 352/352 - 8s - loss: 0.8596 - Accuracy: 0.7011 - val_loss: 0.9421 - val_Accuracy: 0.6748 Epoch 71/200 352/352 - 8s - loss: 0.8555 - Accuracy: 0.7021 - val_loss: 0.9454 - val_Accuracy: 0.6726 Epoch 72/200 352/352 - 8s - loss: 0.8554 - Accuracy: 0.7006 - val_loss: 0.9428 - val_Accuracy: 0.6742 Epoch 73/200 352/352 - 8s - loss: 0.8571 - Accuracy: 0.7006 - val_loss: 0.9488 - val_Accuracy: 0.6730 Epoch 74/200 352/352 - 8s - loss: 0.8550 - Accuracy: 0.7015 - val_loss: 0.9394 - val_Accuracy: 0.6730 Epoch 75/200 352/352 - 8s - loss: 0.8516 - Accuracy: 0.7029 - val_loss: 0.9379 - val_Accuracy: 0.6752 Epoch 76/200 352/352 - 8s - loss: 0.8521 - Accuracy: 0.7027 - val_loss: 0.9430 - val_Accuracy: 0.6738 Epoch 77/200 352/352 - 8s - loss: 0.8517 - Accuracy: 0.7027 - val_loss: 0.9345 - val_Accuracy: 0.6744 Epoch 78/200 352/352 - 8s - loss: 0.8523 - Accuracy: 0.7028 - val_loss: 0.9298 - val_Accuracy: 0.6780 Epoch 79/200 352/352 - 8s - loss: 0.8488 - Accuracy: 0.7037 - val_loss: 0.9268 - val_Accuracy: 0.6838 Epoch 80/200 352/352 - 8s - loss: 0.8491 - Accuracy: 0.7029 - val_loss: 0.9364 - val_Accuracy: 0.6730 Epoch 81/200 352/352 - 8s - loss: 0.8501 - Accuracy: 0.7030 - val_loss: 0.9474 - val_Accuracy: 0.6756 Epoch 82/200 352/352 - 8s - loss: 0.8482 - Accuracy: 0.7031 - val_loss: 0.9500 - val_Accuracy: 0.6740 Epoch 83/200 352/352 - 8s - loss: 0.8461 - Accuracy: 0.7041 - val_loss: 0.9364 - val_Accuracy: 0.6680 Epoch 84/200 352/352 - 8s - loss: 0.8464 - Accuracy: 0.7037 - val_loss: 0.9426 - val_Accuracy: 0.6744 Epoch 85/200 352/352 - 8s - loss: 0.8457 - Accuracy: 0.7037 - val_loss: 0.9350 - val_Accuracy: 0.6728 Epoch 86/200 352/352 - 8s - loss: 0.8443 - Accuracy: 0.7039 - val_loss: 0.9341 - val_Accuracy: 0.6776 Epoch 87/200 352/352 - 8s - loss: 0.8418 - Accuracy: 0.7061 - val_loss: 0.9336 - val_Accuracy: 0.6766 Epoch 88/200 352/352 - 8s - loss: 0.8433 - Accuracy: 0.7038 - val_loss: 0.9296 - val_Accuracy: 0.6814 Epoch 89/200 352/352 - 8s - loss: 0.8430 - Accuracy: 0.7047 - val_loss: 0.9357 - val_Accuracy: 0.6758 Epoch 90/200 352/352 - 9s - loss: 0.8415 - Accuracy: 0.7063 - val_loss: 0.9320 - val_Accuracy: 0.6778 Epoch 91/200 352/352 - 8s - loss: 0.8433 - Accuracy: 0.7050 - val_loss: 0.9355 - val_Accuracy: 0.6724 Epoch 92/200 352/352 - 8s - loss: 0.8398 - Accuracy: 0.7066 - val_loss: 0.9290 - val_Accuracy: 0.6796 Epoch 93/200 352/352 - 8s - loss: 0.8383 - Accuracy: 0.7062 - val_loss: 0.9498 - val_Accuracy: 0.6708 Epoch 94/200 352/352 - 8s - loss: 0.8400 - Accuracy: 0.7053 - val_loss: 0.9309 - val_Accuracy: 0.6784 Epoch 95/200 352/352 - 8s - loss: 0.8397 - Accuracy: 0.7060 - val_loss: 0.9601 - val_Accuracy: 0.6724 Epoch 96/200 352/352 - 8s - loss: 0.8375 - Accuracy: 0.7071 - val_loss: 0.9318 - val_Accuracy: 0.6756 Epoch 97/200 352/352 - 8s - loss: 0.8375 - Accuracy: 0.7071 - val_loss: 0.9250 - val_Accuracy: 0.6774 Epoch 98/200 352/352 - 8s - loss: 0.8356 - Accuracy: 0.7069 - val_loss: 0.9318 - val_Accuracy: 0.6772 Epoch 99/200 352/352 - 8s - loss: 0.8340 - Accuracy: 0.7081 - val_loss: 0.9333 - val_Accuracy: 0.6744 Epoch 100/200 352/352 - 8s - loss: 0.8319 - Accuracy: 0.7090 - val_loss: 0.9502 - val_Accuracy: 0.6768 Epoch 101/200 352/352 - 8s - loss: 0.8313 - Accuracy: 0.7088 - val_loss: 0.9284 - val_Accuracy: 0.6778 Epoch 102/200 352/352 - 8s - loss: 0.8293 - Accuracy: 0.7099 - val_loss: 0.9322 - val_Accuracy: 0.6796 Epoch 103/200 352/352 - 8s - loss: 0.8278 - Accuracy: 0.7110 - val_loss: 0.9385 - val_Accuracy: 0.6712 Epoch 104/200 352/352 - 8s - loss: 0.8300 - Accuracy: 0.7104 - val_loss: 0.9274 - val_Accuracy: 0.6804 Epoch 105/200 352/352 - 8s - loss: 0.8276 - Accuracy: 0.7101 - val_loss: 0.9267 - val_Accuracy: 0.6804 Epoch 106/200 352/352 - 8s - loss: 0.8253 - Accuracy: 0.7119 - val_loss: 0.9341 - val_Accuracy: 0.6784 Epoch 107/200 352/352 - 8s - loss: 0.8247 - Accuracy: 0.7118 - val_loss: 0.9322 - val_Accuracy: 0.6800 Epoch 108/200 352/352 - 8s - loss: 0.8233 - Accuracy: 0.7125 - val_loss: 0.9377 - val_Accuracy: 0.6762 Epoch 109/200 352/352 - 8s - loss: 0.8211 - Accuracy: 0.7131 - val_loss: 0.9324 - val_Accuracy: 0.6732 Epoch 110/200 352/352 - 8s - loss: 0.8214 - Accuracy: 0.7134 - val_loss: 0.9250 - val_Accuracy: 0.6828 Epoch 111/200 352/352 - 9s - loss: 0.8231 - Accuracy: 0.7125 - val_loss: 0.9544 - val_Accuracy: 0.6734 Epoch 112/200 352/352 - 8s - loss: 0.8200 - Accuracy: 0.7129 - val_loss: 0.9535 - val_Accuracy: 0.6744 Epoch 113/200 352/352 - 8s - loss: 0.8218 - Accuracy: 0.7124 - val_loss: 0.9366 - val_Accuracy: 0.6730 Epoch 114/200 352/352 - 8s - loss: 0.8222 - Accuracy: 0.7117 - val_loss: 0.9461 - val_Accuracy: 0.6712 Epoch 115/200 352/352 - 8s - loss: 0.8200 - Accuracy: 0.7132 - val_loss: 0.9345 - val_Accuracy: 0.6746 Epoch 116/200 352/352 - 8s - loss: 0.8188 - Accuracy: 0.7137 - val_loss: 0.9411 - val_Accuracy: 0.6722 Epoch 117/200 352/352 - 8s - loss: 0.8177 - Accuracy: 0.7145 - val_loss: 0.9401 - val_Accuracy: 0.6770 Epoch 118/200 352/352 - 8s - loss: 0.8171 - Accuracy: 0.7135 - val_loss: 0.9313 - val_Accuracy: 0.6772 Epoch 119/200 352/352 - 8s - loss: 0.8165 - Accuracy: 0.7147 - val_loss: 0.9350 - val_Accuracy: 0.6806 Epoch 120/200 352/352 - 8s - loss: 0.8158 - Accuracy: 0.7146 - val_loss: 0.9235 - val_Accuracy: 0.6808 Epoch 121/200 352/352 - 8s - loss: 0.8153 - Accuracy: 0.7147 - val_loss: 0.9468 - val_Accuracy: 0.6768 Epoch 122/200 352/352 - 8s - loss: 0.8143 - Accuracy: 0.7154 - val_loss: 0.9445 - val_Accuracy: 0.6724 Epoch 123/200 352/352 - 8s - loss: 0.8141 - Accuracy: 0.7146 - val_loss: 0.9429 - val_Accuracy: 0.6736 Epoch 124/200 352/352 - 8s - loss: 0.8143 - Accuracy: 0.7145 - val_loss: 0.9291 - val_Accuracy: 0.6782 Epoch 125/200 352/352 - 8s - loss: 0.8123 - Accuracy: 0.7163 - val_loss: 0.9361 - val_Accuracy: 0.6766 Epoch 126/200 352/352 - 8s - loss: 0.8131 - Accuracy: 0.7159 - val_loss: 0.9397 - val_Accuracy: 0.6762 Epoch 127/200 352/352 - 8s - loss: 0.8121 - Accuracy: 0.7157 - val_loss: 0.9351 - val_Accuracy: 0.6794 Epoch 128/200 352/352 - 8s - loss: 0.8114 - Accuracy: 0.7161 - val_loss: 0.9253 - val_Accuracy: 0.6798 Epoch 129/200 352/352 - 8s - loss: 0.8128 - Accuracy: 0.7157 - val_loss: 0.9289 - val_Accuracy: 0.6774 Epoch 130/200 352/352 - 8s - loss: 0.8104 - Accuracy: 0.7163 - val_loss: 0.9535 - val_Accuracy: 0.6680 Epoch 131/200 352/352 - 8s - loss: 0.8118 - Accuracy: 0.7161 - val_loss: 0.9311 - val_Accuracy: 0.6728 Epoch 132/200 352/352 - 8s - loss: 0.8095 - Accuracy: 0.7164 - val_loss: 0.9280 - val_Accuracy: 0.6766 Epoch 133/200 352/352 - 8s - loss: 0.8101 - Accuracy: 0.7164 - val_loss: 0.9339 - val_Accuracy: 0.6784 Epoch 134/200 352/352 - 8s - loss: 0.8104 - Accuracy: 0.7167 - val_loss: 0.9374 - val_Accuracy: 0.6726 Epoch 135/200 352/352 - 8s - loss: 0.8079 - Accuracy: 0.7177 - val_loss: 0.9364 - val_Accuracy: 0.6736 Epoch 136/200 352/352 - 8s - loss: 0.8100 - Accuracy: 0.7165 - val_loss: 0.9248 - val_Accuracy: 0.6778 Epoch 137/200 352/352 - 8s - loss: 0.8085 - Accuracy: 0.7170 - val_loss: 0.9319 - val_Accuracy: 0.6782 Epoch 138/200 352/352 - 8s - loss: 0.8068 - Accuracy: 0.7174 - val_loss: 0.9294 - val_Accuracy: 0.6728 Epoch 139/200 352/352 - 8s - loss: 0.8055 - Accuracy: 0.7182 - val_loss: 0.9303 - val_Accuracy: 0.6742 Epoch 140/200 352/352 - 8s - loss: 0.8071 - Accuracy: 0.7182 - val_loss: 0.9341 - val_Accuracy: 0.6736 Epoch 141/200 352/352 - 8s - loss: 0.8065 - Accuracy: 0.7178 - val_loss: 0.9412 - val_Accuracy: 0.6754 Epoch 142/200 352/352 - 8s - loss: 0.8066 - Accuracy: 0.7185 - val_loss: 0.9398 - val_Accuracy: 0.6724 Epoch 143/200 352/352 - 8s - loss: 0.8064 - Accuracy: 0.7175 - val_loss: 0.9440 - val_Accuracy: 0.6708 Epoch 144/200 352/352 - 8s - loss: 0.8040 - Accuracy: 0.7184 - val_loss: 0.9340 - val_Accuracy: 0.6768 Epoch 145/200 352/352 - 8s - loss: 0.8063 - Accuracy: 0.7180 - val_loss: 0.9289 - val_Accuracy: 0.6760 Epoch 146/200 352/352 - 8s - loss: 0.8046 - Accuracy: 0.7186 - val_loss: 0.9280 - val_Accuracy: 0.6762 Epoch 147/200 352/352 - 8s - loss: 0.8037 - Accuracy: 0.7191 - val_loss: 0.9380 - val_Accuracy: 0.6748 Epoch 148/200 352/352 - 8s - loss: 0.8047 - Accuracy: 0.7195 - val_loss: 0.9295 - val_Accuracy: 0.6770 Epoch 149/200 352/352 - 8s - loss: 0.8044 - Accuracy: 0.7189 - val_loss: 0.9320 - val_Accuracy: 0.6758 Epoch 150/200 352/352 - 8s - loss: 0.8035 - Accuracy: 0.7190 - val_loss: 0.9288 - val_Accuracy: 0.6794 Epoch 151/200 352/352 - 8s - loss: 0.8013 - Accuracy: 0.7190 - val_loss: 0.9435 - val_Accuracy: 0.6702 Epoch 152/200 352/352 - 8s - loss: 0.8017 - Accuracy: 0.7194 - val_loss: 0.9486 - val_Accuracy: 0.6756 Epoch 153/200 352/352 - 8s - loss: 0.8023 - Accuracy: 0.7193 - val_loss: 0.9289 - val_Accuracy: 0.6796 Epoch 154/200 352/352 - 8s - loss: 0.8024 - Accuracy: 0.7201 - val_loss: 0.9523 - val_Accuracy: 0.6708 Epoch 155/200 352/352 - 8s - loss: 0.8024 - Accuracy: 0.7188 - val_loss: 0.9369 - val_Accuracy: 0.6790 Epoch 156/200 352/352 - 8s - loss: 0.8017 - Accuracy: 0.7201 - val_loss: 0.9383 - val_Accuracy: 0.6770 Epoch 157/200 352/352 - 8s - loss: 0.8000 - Accuracy: 0.7200 - val_loss: 0.9338 - val_Accuracy: 0.6786 Epoch 158/200 352/352 - 8s - loss: 0.8001 - Accuracy: 0.7205 - val_loss: 0.9338 - val_Accuracy: 0.6724 Epoch 159/200 352/352 - 8s - loss: 0.7987 - Accuracy: 0.7215 - val_loss: 0.9277 - val_Accuracy: 0.6844 Epoch 160/200 352/352 - 8s - loss: 0.7993 - Accuracy: 0.7212 - val_loss: 0.9299 - val_Accuracy: 0.6776 Epoch 161/200 352/352 - 8s - loss: 0.7996 - Accuracy: 0.7203 - val_loss: 0.9274 - val_Accuracy: 0.6766 Epoch 162/200 352/352 - 8s - loss: 0.7987 - Accuracy: 0.7207 - val_loss: 0.9280 - val_Accuracy: 0.6814 Epoch 163/200 352/352 - 8s - loss: 0.8001 - Accuracy: 0.7203 - val_loss: 0.9303 - val_Accuracy: 0.6788 Epoch 164/200 352/352 - 8s - loss: 0.7988 - Accuracy: 0.7210 - val_loss: 0.9259 - val_Accuracy: 0.6790 Epoch 165/200 352/352 - 8s - loss: 0.7993 - Accuracy: 0.7201 - val_loss: 0.9285 - val_Accuracy: 0.6700 Epoch 166/200 352/352 - 8s - loss: 0.7981 - Accuracy: 0.7219 - val_loss: 0.9411 - val_Accuracy: 0.6790 Epoch 167/200 352/352 - 8s - loss: 0.7983 - Accuracy: 0.7215 - val_loss: 0.9290 - val_Accuracy: 0.6764 Epoch 168/200 352/352 - 8s - loss: 0.8004 - Accuracy: 0.7204 - val_loss: 0.9340 - val_Accuracy: 0.6760 Epoch 169/200 352/352 - 8s - loss: 0.7954 - Accuracy: 0.7221 - val_loss: 0.9342 - val_Accuracy: 0.6802 Epoch 170/200 352/352 - 8s - loss: 0.7954 - Accuracy: 0.7221 - val_loss: 0.9428 - val_Accuracy: 0.6756 Epoch 171/200 352/352 - 8s - loss: 0.7961 - Accuracy: 0.7214 - val_loss: 0.9363 - val_Accuracy: 0.6752 Epoch 172/200 352/352 - 8s - loss: 0.7977 - Accuracy: 0.7214 - val_loss: 0.9328 - val_Accuracy: 0.6798 Epoch 173/200 352/352 - 8s - loss: 0.7953 - Accuracy: 0.7216 - val_loss: 0.9239 - val_Accuracy: 0.6802 Epoch 174/200 352/352 - 8s - loss: 0.7957 - Accuracy: 0.7223 - val_loss: 0.9443 - val_Accuracy: 0.6750 Epoch 175/200 352/352 - 8s - loss: 0.7959 - Accuracy: 0.7219 - val_loss: 0.9307 - val_Accuracy: 0.6762 Epoch 176/200 352/352 - 8s - loss: 0.7951 - Accuracy: 0.7222 - val_loss: 0.9415 - val_Accuracy: 0.6746 Epoch 177/200 352/352 - 8s - loss: 0.7944 - Accuracy: 0.7223 - val_loss: 0.9244 - val_Accuracy: 0.6786 Epoch 178/200 352/352 - 8s - loss: 0.7926 - Accuracy: 0.7235 - val_loss: 0.9484 - val_Accuracy: 0.6730 Epoch 179/200 352/352 - 8s - loss: 0.7949 - Accuracy: 0.7230 - val_loss: 0.9474 - val_Accuracy: 0.6760 Epoch 180/200 352/352 - 8s - loss: 0.7954 - Accuracy: 0.7227 - val_loss: 0.9277 - val_Accuracy: 0.6798 Epoch 181/200 352/352 - 8s - loss: 0.7948 - Accuracy: 0.7233 - val_loss: 0.9497 - val_Accuracy: 0.6712 Epoch 182/200 352/352 - 8s - loss: 0.7942 - Accuracy: 0.7217 - val_loss: 0.9366 - val_Accuracy: 0.6786 Epoch 183/200 352/352 - 8s - loss: 0.7928 - Accuracy: 0.7232 - val_loss: 0.9271 - val_Accuracy: 0.6798 Epoch 184/200 352/352 - 8s - loss: 0.7936 - Accuracy: 0.7231 - val_loss: 0.9336 - val_Accuracy: 0.6812 Epoch 185/200 352/352 - 8s - loss: 0.7942 - Accuracy: 0.7227 - val_loss: 0.9383 - val_Accuracy: 0.6734 Epoch 186/200 352/352 - 8s - loss: 0.7933 - Accuracy: 0.7231 - val_loss: 0.9380 - val_Accuracy: 0.6710 Epoch 187/200 352/352 - 8s - loss: 0.7930 - Accuracy: 0.7235 - val_loss: 0.9390 - val_Accuracy: 0.6754 Epoch 188/200 352/352 - 8s - loss: 0.7924 - Accuracy: 0.7235 - val_loss: 0.9447 - val_Accuracy: 0.6780 Epoch 189/200 352/352 - 8s - loss: 0.7905 - Accuracy: 0.7233 - val_loss: 0.9271 - val_Accuracy: 0.6770 Epoch 190/200 352/352 - 8s - loss: 0.7920 - Accuracy: 0.7239 - val_loss: 0.9361 - val_Accuracy: 0.6768 Epoch 191/200 352/352 - 8s - loss: 0.7921 - Accuracy: 0.7231 - val_loss: 0.9441 - val_Accuracy: 0.6754 Epoch 192/200 352/352 - 8s - loss: 0.7906 - Accuracy: 0.7241 - val_loss: 0.9381 - val_Accuracy: 0.6738 Epoch 193/200 352/352 - 8s - loss: 0.7908 - Accuracy: 0.7240 - val_loss: 0.9298 - val_Accuracy: 0.6826 Epoch 194/200 352/352 - 8s - loss: 0.7906 - Accuracy: 0.7236 - val_loss: 0.9484 - val_Accuracy: 0.6752 Epoch 195/200 352/352 - 8s - loss: 0.7932 - Accuracy: 0.7233 - val_loss: 0.9328 - val_Accuracy: 0.6822 Epoch 196/200 352/352 - 8s - loss: 0.7937 - Accuracy: 0.7227 - val_loss: 0.9253 - val_Accuracy: 0.6806 Epoch 197/200 352/352 - 8s - loss: 0.7904 - Accuracy: 0.7233 - val_loss: 0.9315 - val_Accuracy: 0.6784 Epoch 198/200 352/352 - 8s - loss: 0.7918 - Accuracy: 0.7234 - val_loss: 0.9312 - val_Accuracy: 0.6824 Epoch 199/200 352/352 - 8s - loss: 0.7901 - Accuracy: 0.7242 - val_loss: 0.9486 - val_Accuracy: 0.6756 Epoch 200/200 352/352 - 8s - loss: 0.7910 - Accuracy: 0.7242 - val_loss: 0.9421 - val_Accuracy: 0.6736
pd.DataFrame(model2_fit.history).to_csv("model2_fit_history.csv")
# !cp model2_fit_history.csv "drive/MyDrive/b533_HW3/Part1/"
# %ls drive/MyDrive/b533_HW3/Part1/
from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = make_subplots(rows=1, cols=2, subplot_titles=("Loss", "Accuracy"))
fig.add_trace(go.Scatter(y=model2_fit.history['loss'], line_color='red',name='Training Loss' ),row=1, col=1)
fig.add_trace(go.Scatter(y=model2_fit.history['val_loss'],line_color='orange',name='Testing Loss'),row=1, col=1)
fig.add_trace(go.Scatter(y=model2_fit.history['Accuracy'],line_color='blue',name='Training Accuracy'),row=1, col=2)
fig.add_trace(go.Scatter(y=model2_fit.history['val_Accuracy'],line_color='green',name='Testing Accuracy'),row=1, col=2)
fig.update_yaxes(title_text="loss", row=1, col=1)
fig.update_yaxes(title_text="accuracy", row=1, col=2)
fig.update_layout(height=600, width=800, title_text="HW3:P1 CNN model metrics")
fig.show()
### Comparing the two models:
import pandas as pd
model1_hist = pd.read_csv('model1_fit_history.csv')
model2_hist = pd.read_csv('model2_fit_history.csv')
from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = make_subplots(rows=1, cols=1, subplot_titles=("Loss", "Accuracy"))
fig.add_trace(go.Scatter(y=model1_hist['val_Accuracy'], line_color='red',name='Model 1 Val Accuracy' ),row=1, col=1)
fig.add_trace(go.Scatter(y=model2_hist['val_Accuracy'],line_color='orange',name='Model 2 (Aug data) Val Accuracy'),row=1, col=1)
fig.update_yaxes(title_text="loss", row=1, col=1)
fig.update_yaxes(title_text="accuracy", row=1, col=2)
fig.update_layout(height=600, width=800, title_text="HW3:P1 CNN model metrics comparison")
fig.show()
import matplotlib.pyplot as plt
fig, ax=plt.subplots(1,1,figsize=(10,7))
plt.plot(model1_hist['val_Accuracy'], label="Model 1: Base")
plt.plot(model2_hist['val_Accuracy'], label="Model 2: Augmented")
plt.legend()
plt.title("HW3:P1 CNN model metrics comparison")
plt.ylabel('Validation Accuracy')
plt.xlabel('Epoch')
plt.show()